wayland: Update cursor surface scale when output scale changes
authorJonas Ådahl <jadahl@gmail.com>
Thu, 28 Jun 2018 09:41:09 +0000 (11:41 +0200)
committerJonas Ådahl <jadahl@gmail.com>
Thu, 28 Jun 2018 10:01:48 +0000 (12:01 +0200)
Cursor surfaces didn't listen for output scale changes, meaning they
didn't adapt their scale when an output changed scale, which could
happen for example when changing the monitor scale via Settings.

gdk/wayland/gdkdevice-wayland.c

index 807f0a29ff48f531f8ce0e44e301c5404c3c9891..fb3cfcb505b4015dd68c5b3ccf8bad51c5e42563 100644 (file)
@@ -310,6 +310,9 @@ struct _GdkWaylandDeviceManagerClass
   GdkDeviceManagerClass parent_class;
 };
 
+static void
+pointer_surface_update_scale (GdkDevice *device);
+
 static void deliver_key_event (GdkWaylandSeat       *seat,
                                uint32_t              time_,
                                uint32_t              key,
@@ -4501,10 +4504,18 @@ static const struct zwp_tablet_seat_v2_listener tablet_seat_listener = {
   tablet_seat_handle_pad_added,
 };
 
+static void
+on_monitors_changed (GdkScreen      *screen,
+                     GdkWaylandSeat *seat)
+{
+  pointer_surface_update_scale (seat->master_pointer);
+}
+
 static void
 init_devices (GdkWaylandSeat *seat)
 {
   GdkWaylandDeviceManager *device_manager = GDK_WAYLAND_DEVICE_MANAGER (seat->device_manager);
+  GdkWaylandDisplay *display = GDK_WAYLAND_DISPLAY (seat->display);
 
   /* pointer */
   seat->master_pointer = g_object_new (GDK_TYPE_WAYLAND_DEVICE,
@@ -4524,6 +4535,9 @@ init_devices (GdkWaylandSeat *seat)
     g_list_prepend (device_manager->devices, seat->master_pointer);
   g_signal_emit_by_name (device_manager, "device-added", seat->master_pointer);
 
+  g_signal_connect (display->screen, "monitors-changed",
+                    G_CALLBACK (on_monitors_changed), seat);
+
   /* keyboard */
   seat->master_keyboard = g_object_new (GDK_TYPE_WAYLAND_DEVICE,
                                         "name", "Core Keyboard",